/**
 * Fichier DaoException.java : Définition de classe
 * fr.unice.gnpt.core.dao.DaoException : Encapsule les exceptions des DAO
 * 
 * Auteurs : Groupe GNPT : Gastinel, Nicolas, Pellegrino, Trovato
 */
package fr.unice.gnpt.core.dao;

/**
 * Classe permettant d'encapsuler les exceptions pouvant être générées par les
 * DAO afin de ne pas être dépendant du type du système de persistance.
 * 
 * @author gnpt
 * @version 0.0.2
 */
public class DaoException extends Exception {
	/**
	 * Identifiant de version pour la serialization.
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * Type de l'exception rencontrée.
	 */
	private CodeDaoException codeErreur;

	/**
	 * Constructeur d'une nouvelle exception DAO avec un message explicatif.
	 * 
	 * @param message
	 *            le message expliquant le problème rencontré.
	 */
	public DaoException(String message) {
		super(message, null);
		this.codeErreur = null;
	}

	/**
	 * Constructeur d'une nouvelle exception DAO avec une cause donnée.
	 * 
	 * @param cause
	 *            la cause liée à cette exception. Cette cause peut être connue
	 *            de l'utilisateur par l'appel de la méthode
	 *            {@link DaoException#getCause()}.
	 */
	public DaoException(Throwable cause) {
		this(null, cause);
	}

	/**
	 * Constructeur d'une nouvelle exception DAO avec un message et une cause
	 * donnés.
	 * 
	 * @param message
	 *            le message expliquant le problème rencontré.
	 * @param cause
	 *            la cause liée à cette exception. Cette cause peut être connue
	 *            de l'utilisateur par l'appel de la méthode
	 *            {@link DaoException#getCause()}.
	 */
	public DaoException(String message, Throwable cause) {
		super(message, cause);
		this.codeErreur = CodeDaoException.EXCEPTION_CHAINEE;
	}

	/**
	 * Constructeur d'une nouvelle exception DAO avec un message et un code
	 * d'erreur donné.
	 * 
	 * @param message
	 *            le message expliquant le problème rencontré.
	 * @param codeErreur
	 *            le code d'erreur associé à l'exception.
	 */
	public DaoException(String message, CodeDaoException codeErreur) {
		super(message);
		this.codeErreur = codeErreur;
	}

	/**
	 * Accesseur au code d'erreur rencontré.
	 * 
	 * @return le code d'erreur rencontré.
	 */
	public CodeDaoException getCodeErreur() {
		return this.codeErreur;
	}

	/**
	 * Mutateur du code d'erreur rencontré.
	 * 
	 * @param codeErreur
	 *            le nouveau code d'erreur.
	 */
	public void setCodeErreur(CodeDaoException codeErreur) {
		this.codeErreur = codeErreur;
	}
}
